Circuito con 3 led parpadeantes como salidas y un botón como entrada para pausar la secuencia de encendido de los leds.
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void) {
// Configura PB0 PB1 PB2 como salida
DDRB |= (1 << PB0);
DDRB |= (1 << PB1);
DDRB |= (1 << PB2);
// Configura PD2 como entrada
DDRD &= ~(1 << PD2);
// Configura PD2 con resistencia pull-up interna
PORTD |= (1 << PD2);
// Definimos array de puertos
uint8_t portArray[] = {PB0, PB1, PB2};
while (1) {
// Iteramos por los 3 puertos
for(int i=0; i < sizeof(portArray); i++){
PORTB ^= (1 << portArray[i]); // Hacemos toggle del led
_delay_ms(500);
// Si pulsamos el boton hacemos que se pare la secuencia hasta que soltemos.
// La negacion de la condicion es porque tenemos configurado el puerto con resistencia pull-up y la condicion se invierte
while(!(PIND & (1 << PD2))){
_delay_ms(200);
}
}
}
}
AVR | blinking | leds